/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package interfaz.graficas;

import VO.Datos;
import VO.VariablesAmbientales;
import control.obtenerMedida;
import java.awt.Color;
import java.awt.Graphics;

/**
 *
 * @author David
 */
public class Graficas extends grafica{
 
       
    /**
     * Creates new form NewJPanel
     */
    public Graficas() {
        super();
        initComponents();
    }
   
    
     protected void dibujarPuntos(Graphics g) {
        int idMedida = obtenerMedida.getIdMedida();
        int divisionesHorizontales = (this.getWidth()-15-10)/cantidadDeDatos();
        int posHorizontal = 0;
        g.setColor(Color.black);
        for(int i=0;i<=cantidadDeDatos()-11;i++){
            posHorizontal += divisionesHorizontales;
            if(i < cantidadDeDatos()){
                int dato = (int)Datos.getContenido().get(i).getMedidas().get(idMedida).getValor();
                int posVertical = (int)((this.getHeight()-15)*dato/maximo());
                g.drawOval(posHorizontal+15, this.getHeight()-15-posVertical, 3, 3);
            }
        }
        
        g.setColor(Color.magenta);
        if(cantidadDeDatos()-11 == 0){
            int dato=(int)maximo()-100;
            int posVertical = (int)((this.getHeight()-15)*dato/maximo());
            for(int i=cantidadDeDatos()-11;i<cantidadDeDatos();i++){
                posHorizontal += divisionesHorizontales;
                g.drawOval(posHorizontal+15, this.getHeight()-15-posVertical, 3, 3);
            }
        }
        else{
            /* Calculo de Regresion */
            float m;//pendiente
            float b;//desplazamiento
            int n = Datos.getContenido().size();
            float sxy = 0;
            float sy = 0;
            float sx = 0;
            float sx2 = 0;
            
            for( int i=0; i<n ;i++){
                sxy += Datos.getContenido().get(i).getMedidas().get(idMedida).getValor()*(i+1);
                sx += (i+1);
                sy += Datos.getContenido().get(i).getMedidas().get(idMedida).getValor();
                sx2 += Math.pow((i+1), 2);
            }

            m= (float)(((n*sxy)-(sx*sy))/((n*sx2)-(Math.pow(sx,2))));
            b= (sy-m*sx)/n;
            
            for(int i=cantidadDeDatos()-11;i<cantidadDeDatos();i++){
                int dato = (int)(m*(i+2) + b);
                posHorizontal += divisionesHorizontales;
                int posVertical = (int)((this.getHeight()-15)*dato/maximo());
                g.drawOval(posHorizontal+15, this.getHeight()-15-posVertical, 3, 3);
            }
        }
    }
    @Override
    protected double maximo(){
        int idMedida = obtenerMedida.getIdMedida();
        double maximo = Datos.getContenido().get(0).getMedidas().get(idMedida).getValor();
        for(VariablesAmbientales va : Datos.getContenido()){
            if(va.getMedidas().get(1).getValor() >maximo)
                maximo=(int)va.getMedidas().get(1).getValor();
        }
        return maximo+100;
    }
    
    @Override
    protected int cantidadDeDatos(){
        return super.cantidadDeDatos()+10;
    }
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables
}
